package com.ruben.state;

/**
 * 具体状态 （Concrete States） 会自行实现特定于状态的方法。 为了避免多个状态中包含相似代码， 你可以提供一个封装有部分通用行为的中间抽象类。
 * 状态对象可存储对于上下文对象的反向引用。 状态可以通过该引用从上下文处获取所需信息， 并且能触发状态转移。
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/10/17 18:08
 */
public class ConcreteState extends BaseState {

    public ConcreteState() {
    }

    public ConcreteState(Context context) {
        super(context);
    }

    /**
     * 当前状态执行的方法
     */
    @Override
    public void doThis() {
        System.out.println(this.getClass().getSimpleName() + "#doThis called!");
        context.changeState(new OtherConcreteState(context));
    }

    /**
     * 当前状态执行的方法
     */
    @Override
    public void doThat() {
        System.out.println(this.getClass().getSimpleName() + "#doThad called!");
        context.changeState(new OtherConcreteState(context));
    }
}
